What is didyoumean2?
The didyoumean2 npm package is a utility for suggesting corrections to misspelled words or phrases. It is particularly useful for command-line interfaces, chatbots, and other applications where user input may contain typos. The package uses a combination of string similarity algorithms to provide the best possible suggestions.
What are didyoumean2's main functionalities?
Basic Usage
This feature allows you to provide a list of possible correct words and get suggestions based on the input. In this example, 'appl' is corrected to 'apple'.
const didYouMean = require('didyoumean2');
const input = 'appl';
const suggestions = didYouMean(input, ['apple', 'banana', 'grape']);
console.log(suggestions); // Output: ['apple']
Custom Threshold
This feature allows you to set a custom threshold for the similarity score. The threshold determines how close the input needs to be to the suggestions. In this example, a threshold of 0.4 is used.
const didYouMean = require('didyoumean2');
const input = 'appl';
const options = { threshold: 0.4 };
const suggestions = didYouMean(input, ['apple', 'banana', 'grape'], options);
console.log(suggestions); // Output: ['apple']
Multiple Suggestions
This feature allows you to get multiple suggestions instead of just the best match. In this example, both 'apple' and 'applet' are returned as suggestions for 'appl'.
const didYouMean = require('didyoumean2');
const input = 'appl';
const options = { returnType: 'all-matches' };
const suggestions = didYouMean(input, ['apple', 'applet', 'banana', 'grape'], options);
console.log(suggestions); // Output: ['apple', 'applet']
Other packages similar to didyoumean2
leven
The 'leven' package calculates the Levenshtein distance between two strings, which is a measure of the difference between them. It is useful for finding the closest match to a given input but does not provide a built-in suggestion mechanism like didyoumean2.
fuse.js
Fuse.js is a powerful, lightweight fuzzy-search library that allows for flexible and advanced searching capabilities. It can be used to find approximate string matches within a list of items, similar to didyoumean2, but offers more advanced search options and configurations.
string-similarity
The 'string-similarity' package finds the degree of similarity between two strings, based on the Dice's Coefficient. It can be used to find the closest match to a given input but does not provide a built-in suggestion mechanism like didyoumean2.
didyoumean2


didyoumean2
is a library for matching human-quality input to a list of potential matches using the Levenshtein distance algorithm.
It is inspired by didyoumean.js.
Why reinventing the wheel
-
Based on fastest-levenshtein, the fastest JS implementation of the Levenshtein distance algorithm
-
~100% faster than didyoumean.js
-
Well tested with 100% coverage
-
Static type checking with TypeScript
-
More control on what kind of matches you want to return
-
Support matching object's path
instead of just key
Installation
npm install didyoumean2
const didYouMean = require('didyoumean2').default
import didYouMean from 'didyoumean2'
const {
default: didYouMean,
ReturnTypeEnums,
ThresholdTypeEnums,
} = require('didyoumean2')
import didYouMean, { ReturnTypeEnums, ThresholdTypeEnums } from 'didyoumean2'
Usage
didYouMean(input, matchList[, options])
-
input {string}
: A string that you are not sure and want to match with matchList
-
matchList {Object[]|string[]}
: A List for matching with input
-
options {Object}
(optional): An options that allows you to modify the behavior
-
@return {Array|null|Object|string}
: A list of or single matched result(s), return object if match
is {Object[]}
Options
caseSensitive {boolean}
deburr {boolean}
matchPath {Array}
-
default: []
-
If your matchList
is an array of object, you must use matchPath
to point to the string that you want to match
-
Refer to ramda R.path for how to define the path, e.g. ['obj', 'array', 0, 'key']
returnType {string}
- default:
ReturnTypeEnums.FIRST_CLOSEST_MATCH
returnType | Description |
---|
ReturnTypeEnums.ALL_CLOSEST_MATCHES | Return all matches with the closest value to the input in array |
ReturnTypeEnums.ALL_MATCHES | Return all matches in array |
ReturnTypeEnums.ALL_SORTED_MATCHES | Return all matches in array, sorted from closest to furthest |
ReturnTypeEnums.FIRST_CLOSEST_MATCH | Return first match from ReturnTypeEnums.ALL_CLOSEST_MATCHES |
ReturnTypeEnums.FIRST_MATCH | Return first match (FASTEST) |
threshold {integer|number}
-
depends on thresholdType
-
type: {number}
(similarity
) or {integer}
(edit-distance
)
-
default: 0.4
(similarity
) or 20
(edit-distance
)
-
If the result is larger (similarity
) or smaller (edit-distance
) than or equal to the threshold
, that result is matched
thresholdType {string}
- default:
ThresholdTypeEnums.SIMILARITY
thresholdType | Description |
---|
ThresholdTypeEnums.EDIT_DISTANCE | Refer to Levenshtein distance algorithm, must be integer , lower value means more similar |
ThresholdTypeEnums.SIMILARITY | l = max(input.length, matchItem.length), similarity = (l - editDistance) / l , number from 0 to 1 , higher value means more similar |
trimSpaces {boolean}
-
default: true
-
Remove noises when matching
-
Trim all starting and ending spaces, and concatenate all continuous spaces to one space
Test
Before all:
npm install -g yarn
yarn install
Unit test and coverage:
yarn test
Linter:
yarn lint